dc gan

DC-GAN

代码

本期基于GAN实现图片生成,笔者本来计划在NLP中使用GAN实现文本生成,但是由于NLP中G生成word是不可导的,所以最后改为使用VAE实现,点我具体查看

GAN开山之作:https://arxiv.org/abs/1406.2661

据说是Goodfellow和朋友打赌时产生的灵感,论文第四章Theoretical Results值得反复揣摩。模型有两个,Generator(生成器,下称G)和Discriminator(判别器,下称D),数据来源有两个,真实样本和噪音样本,笔者本期使用高斯分布代替随机向生成噪音样本。

优化函数:SGD+momentum,迭代使用minibatch算法,minibatch中分别更新k次D,更新1次G。更新D时,分别对真实样本和G生成样本采样,喂入模型,使D的目标函数最大化;更新G时,仅对G生成样本采样,喂入模型,使G的目标函数最小化。

D目标函数构成

假设G固定,公式1可变化为

可见公式2由两部分组成: $alog(y) + blog(1-y)$ 其中 $y = D(x)$, $a = p_{data}$, $b = p_g$

如图: $log(x)$ 在(0, 1)上单调递增

如图: log(1-x) 在(0, 1)上单调递减

求公式1中最大D可转化为求其导数

求公式1在D最大是,最小G

由于 $D_{kl}$ 非负,所以当且仅当 $p_{data} = p_{g}$ 时等式最小

代码实现

本期使用CNN充当G和D

生成模型是一个反向CNN

判别模型,使用LeakyReLU

噪音样本服从高斯分布

G和D的参数更新

结果

epoch 2

epoch 40

Nevermore Written by:

步步生姿,空锁满庭花雨。胜将娇花比。